home *** CD-ROM | disk | FTP | other *** search
- /* SOS */
- /***************************************************************************
-
- LFman V1.1
- © LF soft 1992
-
- This utility is a ShareWare product of L.FAILLIE. All rights reserved.
- If you like it, please send 50 FF or 10$ to
-
- L.FAILLIE
- " Les Vuardes "
- 74930 Reignier
- FRANCE
-
- LFman use PowerPacker.library & can speek french if you set the Lang
- Env-variable to "Français". ( SetEnv Lang "Français" )
-
- -> LFman peut parler FRANCAIS en mettant la variable Lang a Français <-
-
- BUGS: The current PP.library (34.2) have a probleme with VD0:.
- ppLoadData() always return a read-write error.
-
- Futurs releases :
- - Support wilds cards,
- - Support multi name - for CSH expand compatibility -
-
- History:
- ----------
- V1.0 29-May-92 : First release,
- V1.1 20-Jun-92 : Move extention for english help from ".HLP"
- to ".MAN".
- ***************************************************************************/
-
-
- #define U_PP /* use powerpacker.library */
- #include <LF.h>
- #include <string.h>
- #include <exec/memory.h>
- #include <stdlib.h>
-
- volatile UBYTE *buffer,
- lang=0; /* English by default */
- volatile ULONG len,i,err;
- volatile char com[32]; /* "Doc:" + 22 for basename + 5 for ext */
- volatile char cm[23]; /* commande */
- volatile char *var; /* Ptr on var */
-
- volatile const char *cof_err[]={"Can't open file","Erreur d'ouverture"},
- *err_LFman_envvar[]={"Can't find LFman variable","Variable LFman pas trouvée"},
- *no_hlp[]={"No help found","Pas d'aide trouvée"};
-
- #ifdef DEBUG
- #define DOC_DIR "ram:"
- #else
- #define DOC_DIR "Doc:"
- #endif
-
- void error(char *msg){
- printf("\033[33m%s\n\033[0m",msg);
- }
-
- void freebuff(){
- if(len)
- FreeMem (buffer, len);
- len=0;
- }
-
- void salut(){
- freebuff();
- ClosePP();
- }
-
- void fcust(){
- if(err=ppLoadData(com,2,MEMF_PUBLIC,&buffer,&len,NULL))
- printf("\033[33m%s : %d\n\033[0m",cof_err[lang],err);
- else {
- #ifdef DEBUG
- printf("Len = %d\n",len);
- #endif
- for(i=0;i<len;i++)
- putchar(*(buffer+i));
- freebuff();
- }
- exit(0);
- }
-
- char sch() /* Search cm commande on com general doc file */
- {
- register char *x,*lmt,fnd=0;
-
- if(!exist(com)) return(0);
- if(err=ppLoadData(com,2,MEMF_PUBLIC,&buffer,&len,NULL)){
- printf("\033[33m%s (%s): %d\n\033[0m",cof_err[lang],com,err);
- return(0);
- }
- lmt=buffer+len;x=buffer;
-
- sprintf(com,"\n##%s",cm);
- i=strlen(com);
-
- #ifdef DEBUG
- printf("buff=%x,len= %d\n",buffer,len);
- #endif
-
- do{
- if(!strnicmp(x,com,i)){
- fnd=1;x+=3;
- while(x<lmt)
- if(strncmp(x,"\n##",3))
- putchar(*x++);
- else {
- puts("");
- break;
- }
- }
- } while(++x<lmt);
-
- freebuff();
- if(fnd)
- return(1);
- else
- return(0);
- }
-
- void main(int ac,char **av){
- OpenPP(); /* open PowerPacker.library */
-
- atexit(salut);
-
- if(var=getenv("Lang")){
- if(!stricmp(var,"Français"))
- lang=1;
- }
-
- if(ac==1) /* No arg */
- strcpy(cm,"LFman");
- else
- if(!strcmp(av[1],"?"))
- strcpy(cm,"LFman");
- else{
- strncpy(cm,av[1],22);
- cm[22]=0;
- }
-
- switch(lang) { /* Set ext */
- case 1: /* Français */
- strcpy(com,".aide");
- break;
- default :
- strcpy(com,".man");
- }
-
- strins(com,cm);
- strins(com,DOC_DIR);
- #ifdef DEBUG
- puts(com);
- #endif
- if(exist(com))
- fcust();
-
- if(lang){ /* For english default doc */
- strcpy(com,".man");
- strins(com,cm);
- strins(com,DOC_DIR);
- #ifdef DEBUG
- puts(com);
- #endif
- if(exist(com))
- fcust();
- }
-
- /* Now search on generals docs */
- if(!(var=getenv("LFman"))){
- error(err_LFman_envvar[lang]);
- exit(0);
- }
-
- FOREVER{
- char *cpt;
- strncpy(com,var,28);
- com[28]=0;
- strins(com,DOC_DIR);
- if(cpt=strchr(com,';'))
- *cpt=0;
- #ifdef DEBUG
- puts(com);
- #endif
- if(sch()) /* find help on curent file */
- exit(0);
- if(!(var=strchr(var,';')))
- break;
-
- var++;
- }
- error(no_hlp[lang]);
- exit(0);
- }
- /* END */
-